Page({
  data: {
    cur: 0, // 0-登录 1-注册
    loginPhone: '',
    loginPassword: '',
    registerPhone: '',
    registerPassword: '',
    code: ''
  },

  // 切换登录/注册标签
  switchTab(e) {
    const index = parseInt(e.currentTarget.dataset.index);
    this.setData({ cur: index });
  },

  // 登录表单输入
  onLoginPhoneInput(e) {
    this.setData({ loginPhone: e.detail.value });
  },
  
  onLoginPasswordInput(e) {
    this.setData({ loginPassword: e.detail.value });
  },
  
  // 注册表单输入
  onRegisterPhoneInput(e) {
    this.setData({ registerPhone: e.detail.value });
  },
  
  onRegisterPasswordInput(e) {
    this.setData({ registerPassword: e.detail.value });
  },
  
  onLoad() {
    this.checkLoginStatus();
    // 初始化云开发环境
    wx.cloud.init({
      env: 'cloud1-8gws34gracc75388',
      traceUser: true
    });
  },
  
  // 检查登录状态
  checkLoginStatus() {
    const userInfo = wx.getStorageSync('userInfo');
    if (userInfo && userInfo._openid) {
      // 用户已使用手机号登录，验证用户信息有效性
      this.getUserInfoFromCloud(userInfo._openid)
        .then(user => {
          if (user) {
            wx.switchTab({ url: '/pages/home/home' });
          } else {
            wx.removeStorageSync('userInfo');
          }
        })
        .catch(err => {
          console.error('获取用户信息失败', err);
          wx.removeStorageSync('userInfo');
        });
    } else {
      // 检查是否有微信登录的token
      const token = wx.getStorageSync('token');
      if (token) {
        // 验证token有效性
        this.validateToken(token)
          .then(() => {
            wx.switchTab({ url: '/pages/home/home' });
          })
          .catch(() => {
            wx.removeStorageSync('token');
          });
      }
    }
  },

  // 从云数据库获取用户信息
  getUserInfoFromCloud(openid) {
    return wx.cloud.database().collection('users')
      .where({
        _openid: openid
      })
      .get()
      .then(res => {
        if (res.data && res.data.length > 0) {
          return res.data[0];
        }
        return null;
      });
  },

  // 验证token有效性（调用后端接口）
  validateToken(token) {
    return new Promise((resolve, reject) => {
      wx.request({
        url: 'http://localhost:9999/api/auth/check-token',
        method: 'GET',
        header: {
          'Authorization': 'Bearer ' + token
        },
        success: (res) => {
          if (res.statusCode === 200 && res.data.code === 200) {
            resolve();
          } else {
            reject();
          }
        },
        fail: (err) => {
          reject(err);
        }
      });
    });
  },

  // 提交表单
  handleSubmit() {
    const { cur, loginPhone, loginPassword, registerPhone, registerPassword } = this.data;
    
    if (cur === 0) {
      // 登录逻辑
      if (!loginPhone.trim() || !loginPassword.trim()) {
        const msg = !loginPhone.trim() && !loginPassword.trim() 
          ? '请输入账号和密码' 
          : !loginPhone.trim() ? '请输入账号' : '请输入密码';
          
        wx.showToast({ 
          title: msg,
          icon: 'none',
          duration: 2000
        });
        return;
      }
      
      this.loginWithPhone(loginPhone, loginPassword);
      
    } else {
      // 注册逻辑
      if (!registerPhone.trim() || !registerPassword.trim()) {
        const msg = !registerPhone.trim() && !registerPassword.trim() 
          ? '请输入手机号和密码' 
          : !registerPhone.trim() ? '请输入手机号' : '请输入密码';
        
        wx.showToast({ 
          title: msg,
          icon: 'none',
          duration: 2000
        });
        return;
      }
      
      this.register(registerPhone, registerPassword);
    }
  },
  
  // 手机号登录
  async loginWithPhone(phone, password) {
    wx.showLoading({ title: '登录中...', mask: true });
    
    try {
      // 调用云函数进行登录验证
      const res = await wx.cloud.callFunction({
        name: 'login',
        data: {
          action: 'login',
          phone: phone,
          password: password
        }
      });
      
      wx.hideLoading();
      
      if (res.result.success) {
        this.handleLoginSuccess(res.result.user);
      } else {
        wx.showToast({
          title: res.result.message || '登录失败',
          icon: 'none'
        });
      }
    } catch (error) {
      wx.hideLoading();
      console.error('登录失败', error);
      wx.showToast({
        title: '登录失败，请重试',
        icon: 'none'
      });
    }
  },
  
  // 注册
  async register(phone, password) {
    wx.showLoading({ title: '注册中...', mask: true });
    
    try {
      // 调用云函数进行注册
      const res = await wx.cloud.callFunction({
        name: 'login',
        data: {
          action: 'register',
          phone: phone,
          password: password
        }
      });
      
      wx.hideLoading();
      
      if (res.result.success) {
        wx.showToast({ title: '注册成功' });
        // 注册后自动登录
        this.loginWithPhone(phone, password);
      } else {
        wx.showToast({
          title: res.result.message || '注册失败',
          icon: 'none'
        });
      }
    } catch (error) {
      wx.hideLoading();
      console.error('注册失败', error);
      wx.showToast({
        title: '注册失败，请重试',
        icon: 'none'
      });
    }
  },

  // 微信登录
  async loginWithWechat() {
    try {
      // 1. 获取微信登录code
      const loginRes = await new Promise((resolve, reject) => {
        wx.login({
          success: resolve,
          fail: reject
        });
      });
      
      if (!loginRes.code) {
        throw new Error('获取登录凭证失败');
      }
      
      // 2. 发送到后端进行微信登录
      wx.showLoading({ title: '微信登录中...', mask: true });
      
      // 修改为POST方法，将code放在请求体中
      const authRes = await new Promise((resolve, reject) => {
        wx.request({
          url: 'http://localhost:9999/wechat/login',
          method: 'POST',
          data: { code: loginRes.code },
          header: {
            'Content-Type': 'application/json'
          },
          success: (res) => {
            if (res.statusCode === 200 && res.data.code === 200) {
              resolve(res.data.data);
            } else {
              reject({ message: res.data.message || '登录失败' });
            }
          },
          fail: (err) => {
            reject({ message: '网络请求失败', detail: err });
          }
        });
      });
      
      wx.hideLoading();
      this.handleWechatLoginSuccess(authRes);
      
    } catch (error) {
      wx.hideLoading();
      console.error('微信登录失败:', error);
      wx.showToast({
        title: error.message || '微信登录失败',
        icon: 'none'
      });
    }
  },

  // 处理微信登录成功
  handleWechatLoginSuccess(res) {
    // 假设res包含token和user
    wx.setStorageSync('token', res.token);
    wx.setStorageSync('userInfo', res.user);
    wx.reLaunch({ url: '/pages/home/home' });
  },

  // 处理手机号登录成功
  handleLoginSuccess(user) {
    // 存储用户信息到本地缓存
    wx.setStorageSync('userInfo', user);
    // 跳转到首页
    wx.reLaunch({ url: '/pages/home/home' });
  },

  // 忘记密码
  forgotPassword() {
    wx.navigateTo({ url: '/pages/forgot/forgot' });
  },

  // 微博登录（示例）
  loginWithWeibo() {
    wx.showToast({ title: '暂未开放', icon: 'none' });
  },
  
  // 支付宝登录（示例）
  loginWithAlipay() {
    wx.showToast({ title: '暂未开放', icon: 'none' });
  }
});